package AnalizadorSintactico;

import java.util.ArrayList;

import javax.swing.tree.DefaultMutableTreeNode;

import AnalizadorLexico.Lexema;

public class Metodo {

	private Lexema acceso;
	private Lexema modificador;
	private Lexema tipoRetorno;
	private Lexema identificador;
	private ArrayList<Parametro> parametros;
	private ArrayList<Sentencia> bloqueSentencias;

	public Metodo(Lexema acceso, Lexema modificador, Lexema tipoRetorno,
			Lexema identificador, ArrayList<Parametro> parametros,
			ArrayList<Sentencia> bloqueSentencias) {
		this.acceso = acceso;
		this.modificador = modificador;
		this.tipoRetorno = tipoRetorno;
		this.identificador = identificador;
		this.parametros = parametros;
		this.bloqueSentencias = bloqueSentencias;
	}

	public DefaultMutableTreeNode getSubArbol() {
		DefaultMutableTreeNode nodo = new DefaultMutableTreeNode(this);
		if (bloqueSentencias != null) {
			for (Sentencia i : bloqueSentencias) {
				// System.out.println(i.toString());
				DefaultMutableTreeNode nodoS = i.getSubArbol();
				nodo.add(nodoS);
			}
		} else {
			System.out.println("error devolviendo sentencias");
		}
		return nodo;
	}

	@Override
	public String toString() {
		String cadena = "Metodo: " + tipoRetorno.getLexema() + " <-  "
				+ identificador.getLexema() + "( ";
		if (parametros != null) {
			int x = 0;
			for (Parametro p : parametros) {
				if (x != 0) {
					cadena += ", " + p.toString();
				} else {
					cadena += p.toString();
				}
				x++;
			}
		}
		return cadena + " )";
	}

	public Lexema getAcceso() {
		return acceso;
	}

	public Lexema getModificador() {
		return modificador;
	}

	public Lexema getTipoRetorno() {
		return tipoRetorno;
	}

	public Lexema getIdentificador() {
		return identificador;
	}

	public ArrayList<String> getParametros() {
		ArrayList<String> params = new ArrayList<String>();
		for (Parametro i : parametros) {
			params.add(i.getTipo());
		}

		return params;
	}

	public ArrayList<Sentencia> getBloqueSentencias() {
		return bloqueSentencias;
	}

}
